﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AnalisisDeRiesgosConfiguration.Exceptions;
using System.Text.RegularExpressions;

namespace AnalisisDeRiesgosConfiguration.Model
{
    class User
    {
        public string CI { get; set; } // The CI of the user
        public String FirstName { set; get; } // The First Name of the user
        public String LastName { set; get; } // The Last name of the user
        public String SecondLastName { set; get; } // The second last name of the user
        public String Password { set; get; } // The password that the user will input
        public String RePassword { set; get; } // The passowrd that the user must re input

        public User()
        {
            CI = "";
            FirstName = "";
            LastName = "";
            SecondLastName = "";
            Password = "";
            RePassword = "";
        }

        public void Validate()
        {
            ValidateEmptyStrings();
            ValidateLenths();
            ValidateRegularExpressions();

            if (Password != RePassword)
                throw new RegisterUserException("Los Passwords no coinciden");
        }

        private void ValidateLenths()
        {
            if (CI.Length > 10)
                throw new RegisterUserException("El CI no puede tener mas de 10 dígitos");
            if (FirstName.Length > 50)
                throw new RegisterUserException("El nombre o nombres no deben sobrepasar los 50 caracteres");
            if (LastName.Length > 50)
                throw new RegisterUserException("El apellido paterno no debe sobrepasar los 50 caracteres");
            if (SecondLastName.Length > 50)
                throw new RegisterUserException("El apellido materno no debe sobrepasar los 50 caracteres");
            if (Password.Length < 6 || Password.Length > 20)
                throw new RegisterUserException("La contraseña no debe ser menos de 6 caracteres y mas de 20 caracteres");
        }

        private void ValidateEmptyStrings()
        {
            if (String.IsNullOrEmpty(CI))
                throw new RegisterUserException("El CI no puede ser vacio");
            if (String.IsNullOrEmpty(FirstName))
                throw new RegisterUserException("El nombre no puede ser vacio");
            if (String.IsNullOrEmpty(LastName))
                throw new RegisterUserException("El apellido paterno no puede ser vacio");
            if (String.IsNullOrEmpty(SecondLastName))
                throw new RegisterUserException("El apellido materno no puede ser vacio");
            if (String.IsNullOrEmpty(Password))
                throw new RegisterUserException("El password no debe ser vacio");
        }

        private void ValidateRegularExpressions()
        {
            if (!Regex.Match(CI, @"^\d+$").Success)
                throw new RegisterUserException("El CI solo puede ser digitos numericos");
            if (!Regex.Match(FirstName, @"^[a-zA-Z ñÑáéíóúÁÉÍÓÚ]+$").Success)
                throw new RegisterUserException("El nombre debe ser solo letras mayusculas o minusculas");
            if (!Regex.Match(LastName, @"^[a-zA-Z ñÑáéíóúÁÉÍÓÚ]+$").Success)
                throw new RegisterUserException("El apellido paterno debe ser solo letras mayusculas o minusculas");
            if (!Regex.Match(SecondLastName, @"^[a-zA-Z ñÑáéíóúÁÉÍÓÚ]+$").Success)
                throw new RegisterUserException("El apellido materno debe ser solo letras mayusculas o minusculas");
        }
    }
}
